package com.douhulu.bytedance.common.util.http;

import com.douhulu.bytedance.common.enums.ByteType;
import com.douhulu.bytedance.common.error.ByteErrorException;

import java.io.IOException;
import java.util.Map;

/**
 * <h2> 奕泽云 -  </h2>
 *
 * @Author: 奕泽云 - 曾庆雷
 * @Email: 75881401@qq.com
 * @Since: 2022-05-01 15:58
 * CopyRight：山西威斯汀文化传播有限公司
 */
public interface RequestExecutor<T, E> {

    /**
     * 执行http请求.
     *
     * @param uri    uri
     * @param data   数据
     * @param byteType 微信模块类型
     * @return 响应结果
     * @throws ByteErrorException 自定义异常
     * @throws IOException      io异常
     */
    T execute(String uri, Map<String, String> headers, E data, ByteType byteType) throws ByteErrorException, IOException;

    /**
     * 执行http请求.
     *
     * @param uri     uri
     * @param data    数据
     * @param handler http响应处理器
     * @param byteType  微信模块类型
     * @throws ByteErrorException 自定义异常
     * @throws IOException      io异常
     */
    void execute(String uri, Map<String, String> headers, E data, ResponseHandler<T> handler, ByteType byteType) throws ByteErrorException, IOException;

    void execute(String uri, Map<String, String> headers, String data, ResponseHandler<String> handler, ByteType byteType) throws ByteErrorException, IOException;
}
